package com.game.util;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 猜数字游戏的工具类
 * @author Administrator
 *
 */
public class GameUtils {
	/**
	 * 验证是不是4位纯数字
	 * @param number
	 * @return
	 */
	public static boolean verifyNumber(String number){
		boolean flag = false;
		//正则表达式规则：0~9内的数字连续出现4次
		Pattern pattern = Pattern.compile("[0-9]{4}");
		Matcher matcher = pattern.matcher(number);
		if(matcher.matches()){//如果匹配成功就是纯数字
			flag = true;
		}
		return flag;
	}
	
	/**
	 * 验证是否有重复字符,true有重复，false没重复
	 * @param number
	 * @return
	 */
	public static boolean verifyRepeat(String number){
		boolean flag = false;
		for(int i = 0;i<number.length();i++){
			for(int j = 0;j<i;j++){
				if(number.charAt(i) == number.charAt(j)){
					flag = true;
				}
			}
		}
		return flag;
	}
	
	/**
	 * 随机生成不重复的4位数
	 * @return
	 */
	public static String generateRandNumber(){
		StringBuffer randBuffer = new StringBuffer();
		String scopeStr = "0123456789";
		Random random = new Random();
		for(int i = 0;i<4;i++){
			//获取0-9随机数
			int num = random.nextInt(scopeStr.length());
			//将随机的字符追加到buffer
			randBuffer.append(scopeStr.charAt(num));
			//去除已经追加的字符，为了避免重复
			scopeStr = scopeStr.replace(String.valueOf(scopeStr.charAt(num)), "");
			
		}
		return randBuffer.toString();
	}
	
	/**
	 * 计算猜测结果
	 * @param answer
	 * @param number
	 * @return
	 */
	public static String guessResult(String answer,String number){
		//数字和位置都对
		int rightA = 0;
		//有该数字，但是位置不对
		int rightB = 0;
		
		//计算A的个数
		for(int i = 0;i<4;i++){
			//位置和数字都相同
			if(answer.charAt(i) == number.charAt(i)){
				rightA++;
			}
		}
		
		//计算B的个数
		for(int i = 0;i<4;i++){
			for(int j = 0;j<4;j++){
				//位置不同
				if(i != j){
					//数字相同
					if(answer.charAt(i) == number.charAt(j)){
						rightB++;
					}
				}
			}
		}
		return String.format("%sA%sB", rightA,rightB);
		
	}
	
	/**
	 * 获取标准格式的时间
	 * @return
	 */
	public static String getStdDate(){
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		return format.format(new Date());
	}
}
